Bug #561631. Patch from Yue Wang. Ref the button in the idle function to
authorLi Yuan <li.yuan@sun.com>
Thu, 26 Feb 2009 02:28:12 +0000 (02:28 +0000)
committerLi Yuan <liyuan@src.gnome.org>
Thu, 26 Feb 2009 02:28:12 +0000 (02:28 +0000)
2009-02-26  Li Yuan  <li.yuan@sun.com>

        * gailbutton.c: (idle_do_action):
        Bug #561631. Patch from Yue Wang. Ref the button in the idle
        function to prevent the button being finalized.

svn path=/trunk/; revision=22408

modules/other/gail/ChangeLog
modules/other/gail/gailbutton.c

index 8551fb8e8d116155b580f0c8e5568c3dc8d99dd2..a4449dd58584960b71bc516a46869ecbda255f7b 100644 (file)
@@ -1,3 +1,9 @@
+2009-02-26  Li Yuan  <li.yuan@sun.com>
+
+       * gailbutton.c: (idle_do_action):
+       Bug #561631. Patch from Yue Wang. Ref the button in the idle
+       function to prevent the button being finalized.
+
 2009-02-25  Li Yuan  <li.yuan@sun.com>
 
        * gailtreeview.c: (gail_tree_view_ref_accessible_at_point):
index 3226ecd4c27f90dc8497ed48d858a3a42dadfbce..01c6778f4b76594cb2865eeb0d4ae4df45bfaa65 100644 (file)
@@ -503,15 +503,20 @@ idle_do_action (gpointer data)
   tmp_event.button.send_event = TRUE;
   tmp_event.button.time = GDK_CURRENT_TIME;
   tmp_event.button.axes = NULL;
-  
+
+  g_object_ref (gail_button);
+
   if (widget == NULL /* State is defunct */ ||
       !GTK_WIDGET_IS_SENSITIVE (widget) || !GTK_WIDGET_VISIBLE (widget))
-    return FALSE;
+    {
+      g_object_unref (gail_button);
+      return FALSE;
+    }
   else
     gtk_widget_event (widget, &tmp_event);
 
   button = GTK_BUTTON (widget); 
-  while (g_queue_get_length(gail_button->action_queue) != 0
+  while (!g_queue_is_empty (gail_button->action_queue)
     {
       gint action_number = (gint) g_queue_pop_head (gail_button->action_queue);
       if (gail_button->default_is_press)
@@ -572,7 +577,7 @@ idle_do_action (gpointer data)
          break;
        }
     }
-
+  g_object_unref (gail_button);
   return FALSE;
 }